
#include "stdafx.h"
#include "OS.h"
#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "mmsys32.lib")

namespace oc
{

DWORD	OSGetTime()
{
	return timeGetTime();
}

void	OSCurrentDir(int buffsize, char* szDir)
{
	GetCurrentDirectory(buffsize, szDir);
}

DWORD	OSMsg(const char* msg, DWORD msgbtn)
{
	// sometimes 
	const char* szCap = "OzZ-Control's Safe-Message-Delivery: (Windows)";
	DWORD ret;
	do
	{
		if((msgbtn & (MSGBTN_EX_YES|MSGBTN_EX_NO)) == (MSGBTN_EX_OK|MSGBTN_EX_CANCEL))
		{
			ret = MessageBox(NULL, msg, szCap, MB_YESNO);
			break;
		}
		if((msgbtn & (MSGBTN_EX_OK|MSGBTN_EX_CANCEL)) == (MSGBTN_EX_OK|MSGBTN_EX_CANCEL))
		{
			ret = MessageBox(NULL, msg, szCap, MB_OKCANCEL);
			break;
		}
		if((msgbtn & (DWORD)(MSGBTN_EX_ACCEPT|MSGBTN_EX_DECLINE)) == (MSGBTN_EX_ACCEPT|MSGBTN_EX_DECLINE))
		{
			ret = MessageBox(NULL, msg, szCap, MB_OKCANCEL);
			break;
		}
		if((msgbtn & MSGBTN_EX_ACCEPT) == MSGBTN_EX_ACCEPT)
		{
			ret = MessageBox(NULL, msg, szCap, MB_OK);
			break;
		}
		if((msgbtn & MSGBTN_EX_DECLINE) == MSGBTN_EX_DECLINE)
		{
			ret = MessageBox(NULL, msg, szCap, MB_OK);
			break;
		}
		if((msgbtn & MSGBTN_YESNOCANCEL) == MSGBTN_YESNOCANCEL)
		{
			ret = MessageBox(NULL, msg, szCap, MB_YESNOCANCEL);
			break;
		}
		if((msgbtn & (MSGBTN_EX_ACCEPT|MSGBTN_EX_CANCEL)) == (MSGBTN_EX_ACCEPT|MSGBTN_EX_CANCEL))
		{
			break;
		}
		if((msgbtn & MSGBTN_RETRYABORT) == MSGBTN_RETRYABORT)
		{
			ret = MessageBox(NULL, msg, szCap, MB_RETRYCANCEL);
			break;
		}
		if((msgbtn & MSGBTN_RETRYPROCEEDABORT) == MSGBTN_RETRYPROCEEDABORT)
		{
			ret = MessageBox(NULL, msg, szCap, MB_ABORTRETRYIGNORE);
			break;
		}
		ret = MessageBox(NULL, msg, szCap, MB_OK);
		break;
	}while(0);//todo: check
	switch(ret)
	{
	case IDOK:
	case IDYES:
	case IDCONTINUE:
	case IDIGNORE:
		return MSGBTN_EX_ACCEPT;
	case IDTRYAGAIN:
		return MSGBTN_EX_RETRY;
	case IDNO:
	case IDCANCEL:
	case IDABORT:
	case IDCLOSE:
	case IDTIMEOUT:
	default:
		return MSGBTN_EX_DECLINE;
	}
}

} //namespace oc